From: Giovanni Campagna Date: Tue, 15 Mar 2011 20:22:57 +0000 (+0100) Subject: Bluetooth: fix updating the device list X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8645 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=7f67c34b396d9ada7d665f76e6bcd08edfc9799e;p=gnome-shell.git Bluetooth: fix updating the device list Inside the inner loop, use the inner iterator, not that of the outer loop. At the same time, refactor the code to rely less on private properties appended to foreign objects. https://bugzilla.gnome.org/show_bug.cgi?id=644858 --- diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js index 78859075c..092cd1ae8 100644 --- a/js/ui/status/bluetooth.js +++ b/js/ui/status/bluetooth.js @@ -136,6 +136,7 @@ Indicator.prototype = { _updateDevices: function() { let devices = this._applet.get_devices(); + let newlist = [ ]; for (let i = 0; i < this._deviceItems.length; i++) { let item = this._deviceItems[i]; let destroy = true; @@ -143,26 +144,20 @@ Indicator.prototype = { // we need to deep compare because BluetoothSimpleDevice is a boxed type // (but we take advantage of that, because _skip will disappear the next // time get_devices() is called) - if (this._deviceCompare(item._device, devices[i])) { - item.label.text = devices[i].alias; - devices[i]._skip = true; + if (this._deviceCompare(item._device, devices[j])) { + item.label.text = devices[j].alias; + devices[j]._skip = true; destroy = false; + break; } } - if (destroy) { + if (destroy) item.destroy(); - item._destroyed = true; - } - } - - let newlist = [ ]; - for (let i = 0; i < this._deviceItems.length; i++) { - let item = this._deviceItems[i]; - if (!item._destroyed) + else newlist.push(item); } - this._deviceItems = newlist; + this._deviceItems = newlist; this._hasDevices = newlist.length > 0; for (let i = 0; i < devices.length; i++) { let d = devices[i];